$title  diskette routines for CBIOS24  "DRUT24"   Date: 14/8-84
;
;
;
public  seldsk,settrk,setsec,sectran,setdma,home
;
;
;       external parameters
;
extrn   runit,RTRACK,RSECTOR,RDMA,DPBASE,M0,M1,MODE
;
        cseg
;
;*******************************************************************************
;
;       select unit
;
;       input parameters:
;                               C - unit number
;
;       parameters changed:
;                               runit is set to logical requested unit
;                               punit is set to physical requested unit
;                               rmode set by ident called by this routine
;
;                               pointers to parameter block and sector
;                               translate table in DPBASE table for requsted
;                               unit
;       exit parameters:
;                               HL - pointer to requested unit's parameter
;                               block. HL = 0 error flag.
;
;       registers changed:
;                               A, B, C, D, E, H, L and flags
;
;*******************************************************************************
;
Seldsk:
        LXI     H,0
        mov     a,c
        cpi     01+1   ;must be between 0 and 3
;
        jnc     SELEXIT ;error exit if unit outside limits
        sta     runit   ;set requested unit
        ANA     A
        LDA     M0
        JZ      S1
        LDA     M1
S1:
        STA     MODE
        ANA     A
        MOV     A,C
        JZ      SEL1
        ADI     2
;
;       disk number is in the proper range
;       compute proper disk parameter header address
;
sel1:
        mov     c,a
        mov     l,a     ;L=disk number
        mvi     h,0     ;high order zero
        dad     h       ;*2
        dad     h       ;*4
        dad     h       ;*8
        dad     h       ;*16 (size of each header)
        lxi     d,dpbase
        dad     d       ;HL=.dpbase(diskno*16)
;
SELEXIT:
        ret             ;error exit from select unit
$e
;*******************************************************************************
;
;       set requested track address
;
;       input parameters:
;                               C - requested track address
;       parameters changed:
;                               RTRACK set to requsted track address
;       exit parameters:
;                               non
;       registers changed:
;                               A
;
;*******************************************************************************
;
settrk:
        mov     a,c
        sta     rtrack  ;set requested track address
        ret             ;exit from settrk
$e
;*******************************************************************************
;
;       set requested sector address
;
;       input parameters:
;                               C - requested sector address
;       parameters changed:
;                               RSECTOR set to requsted sector address
;       exit parameters:
;                               non
;       registers changed:
;                               A
;
;*******************************************************************************
;
setsec: ;set sector given by register c
        mov     a,c
        sta     rsector
        ret
;
$e
;*******************************************************************************
;
;       translate sector address
;
;       input parameters:
;                               BC - sector address
;                               DE - translate table pointer or sector offset
;       parameters changed:
;                               non
;       exit parameters:
;                               HL - translated sector
;       registers changed:
;                               A, D, E, H, L and FLAGS
;
;*******************************************************************************
;
;
sectran:
        xchg            ;HL= translate table
        mov     a,l
        ora     h       ;A= 1 if dd or hd
        dad     b       ;HL=sector + 1 or pointer to translated sector
        dcr     a       ;dd and hd sector translate table =1 > sector offset
;
        rz              ;exit from sectran if dd or hd.
;
        mov     l,m     ;L = trans(sector)
        mvi     h,0     ;HL= trans(sector)
;
        ret             ;exit from sectran, with value in HL
$e
;*******************************************************************************
;
;       set requested dma address
;
;       input parameters:
;                               BC - requested dma address
;       parameters changed:
;                               RDMA set to requsted dma address
;       exit parameters:
;                               non
;       registers changed:
;                               H and L
;
;*******************************************************************************
;
setdma:
        mov     l,c     ;low order address
        mov     h,b     ;high order address
        shld    rdma    ;save the address
        ret             ;exit from set dma address
;
$e
;*******************************************************************************
;
;       set requested track to address 0
;
;       input parameters:
;                               non
;       parameters changed:
;                               RTRACK set to 0
;       exit parameters:
;                               non
;       registers changed:
;                               A and FLAGS
;
;*******************************************************************************
;
home:
        sub     a
        sta     rtrack  ;set requested track address to zero
;
        ret             ;exit from home
;
;
        end
